﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace rent_car.Manejadores
{
    class ValidadorDeFormularios
    {
        private Form formularioAValidar;
        private ErrorProvider epErrores;
        private bool validados;

        public ValidadorDeFormularios(Form formulario)
        {
            formularioAValidar = formulario;
            epErrores = new ErrorProvider(formularioAValidar);
            epErrores.BlinkRate = 1000;
        }

        public ValidadorDeFormularios()
        {
            epErrores = new ErrorProvider();
            epErrores.BlinkStyle = 0;
        }

        public bool ValidarCampos()
        {
            validados = true;
            foreach (Control control in formularioAValidar.Controls)
            {

                if (control is TextBox)
                {
                    ValidarTextBox((TextBox)control);

                }
                else if (control is NumericUpDown)
                {

                    ValidarNumericUpDown((NumericUpDown)control);
                }
                else if (control is Panel)
                {
                    validarPanel((Panel)control);
                }
            }
            return validados;
        }

        public void ValidarComboBox(ComboBox comboBox)
        {
            if (comboBox.SelectedIndex == -1)
            {
                validados = false;
                epErrores.SetError(comboBox, "Debe seleccionar una opción");
            }
        }

        public void ValidarNumericUpDown(NumericUpDown numericUpDown)
        {
            if (numericUpDown.Value < 1)
            {
                validados = false;
                epErrores.SetError(numericUpDown, "Debe ser mayor que cero(0)");
            }
        }

        public void ValidarTextBox(TextBox textBox)
        {
            if (textBox.Text.Trim().Equals(""))
            {
                validados = false;
                epErrores.SetError(textBox, "Campo  Requerido");
            }
        }

        public void LimpiarTextBox(TextBox textBox)
        {
            if (!textBox.Text.Trim().Equals(""))
            {
                textBox.Text = "";
            }
        }

        public void LimpiarComboBox(ComboBox combo)
        {
            int indice = combo.SelectedIndex;
            if (indice > 1)
            {
                combo.SelectedItem.Equals("");

            }
        }

        public void LimpiarMascara(MaskedTextBox mascara)
        {
            if (mascara.MaskCompleted)
            {
                mascara.Text = " ";
            }
        }

        public void LimpiarCheckBox(CheckBox check)
        {

            if (check.Checked)
            {
                check.Checked = false;
            }
        }

        public void ValidarMaskara(MaskedTextBox mascara)
        {
            if (!mascara.MaskCompleted)
            {
                validados = false;
                epErrores.SetError(mascara, "Necesita ser Completado");
            }
        }

        public void validarCheckBox(CheckBox chequiador)
        {
            if (!chequiador.Checked)
            {
                validados = false;
                epErrores.SetError(chequiador, "Necesita ser Chequeado");
            }
        }

        public bool validarPanel(Panel panel)
        {
            validados = true;
            if (panel.HasChildren)
            {
                foreach (Control control in panel.Controls)
                {
                    verificarControl(control);
                }
            }
                return validados;
        }

        private void verificarControl(Control control)
        {
            if (control is TextBox)
            {
                ValidarTextBox((TextBox)control);
            }
            if (control is ComboBox)
            {
                ValidarComboBox((ComboBox)control);
            }
            if (control is MaskedTextBox)
            {
                ValidarMaskara((MaskedTextBox)control);
            }
            if (control is CheckBox)
            {
                validarCheckBox((CheckBox)control);
            }
        }

        public bool validarCamposEspecificos(params Control[] controles)
        {
            validados = true;
            foreach (Control control in controles)
            {
                verificarControl(control);
            }
            return validados;
        }

        public void LimpiarCampos(params Panel[] paneles)
        {
            foreach (Panel panel in paneles)
            {
                if (panel.HasChildren)
                {
                    foreach (Control control in panel.Controls)
                    {
                        if (control is TextBox)
                        {
                            LimpiarTextBox((TextBox)control);
                        }
                        if (control is MaskedTextBox)
                        {
                            LimpiarMascara((MaskedTextBox)control);
                        }
                        if (control is ComboBox)
                        {
                            LimpiarComboBox((ComboBox)control);
                        }
                        if (control is CheckBox)
                        {
                            LimpiarCheckBox((CheckBox)control);
                        }
                    }
                }
            }
        }

        public void LimpiarCampos(params GroupBox[] paneles)
        {
            foreach (GroupBox panel in paneles)
            {
                if (panel.HasChildren)
                {
                    foreach (Control control in panel.Controls)
                    {
                        if (control is TextBox)
                        {
                            LimpiarTextBox((TextBox)control);
                        }
                        if (control is MaskedTextBox)
                        {
                            LimpiarMascara((MaskedTextBox)control);
                        }
                        if (control is ComboBox)
                        {
                            LimpiarComboBox((ComboBox)control);
                        }
                        if (control is CheckBox)
                        {
                            LimpiarCheckBox((CheckBox)control);
                        }
                    }
                }
            }
        }

        public void limpiarErrores(Control control)
        {
            epErrores.SetError(control, "");
        }
    }
}

